package com.ffcs.crmd.tsp.api.task.job;

import java.util.Date;
import java.util.List;

import com.ffcs.crmd.tsp.api.dto.task.TspJobDataMap;
import com.ffcs.crmd.tsp.api.dto.task.TspJobInstance;
import com.ffcs.crmd.tsp.common.exception.TspException;

/**
 * 
 * 功能说明:调度执行上下文环境接口
 *
 * @author ZHONGFUHUA
 * 
 * @since 1.0.0-SNAPSHOT
 *
 */
public interface IJobExecutionContext<T> {
    
    /**
     * 
     * 功能说明:加入业务数据
     * 
     * @param param 参数
     */
    public void joinBussinessData(T param);
    
    /**
     * 
     * 功能说明:加入业务数据
     * 
     * @param param 参数
     */
    public void joinBussinessDatas(List<T> param);
    
    /**
     * 
     * 功能说明:删除业务数据
     * 
     * @param param 参数
     *
     */
    public void removeBussinessData(T param);
    
    /**
     * 
     * 功能说明:删除所有业务数据
     * 
     */
    public void removeAllBussinessData();

    
    /**
     * 
     * 功能说明:获取任务参数
     * 
     * @return
     */
    public TspJobDataMap getTspJobDataMap();
    
    /**
     * 
     * 功能说明:子任务对象
     * 
     * @return
     */
    public TspJobInstance getTspJobInstance();
    
    /**
     * 
     * 功能说明:当前执行时间
     * 
     * @return
     */
    public Date getFireTime();
    
    /**
     * 
     * 功能说明:调度中心执行时间
     * 
     * @return
     */
    public Date getScheduledFireTime();
    
    /**
     * 
     * 功能说明:上一次执行时间
     * 
     * @return
     */
    public Date getPreviousFireTime();
    
    /**
     * 
     * 功能说明:下一次执行时间
     * 
     * @return
     */
    public Date getNextFireTime();
    
    /**
     * 
     * 功能说明:集群实例ID
     * 
     * @return
     */
    public String getFireInstanceId();
    
    
    /**
     * 功能说明:
     * 
     * @return
     */
    public String getSchedulerName();
    
    /**
     * 
     * 功能说明:任务执行时长
     * 
     * @return
     */
    public long getJobRunTime();
    
    /**
     * 
     * 功能说明:调度中心中断重启后是否可恢复
     * 
     * @return
     */
    public boolean isRecovering();
    
    /**
     * 
     * 功能说明:重新执行次数
     * 
     * @return
     */
    public int getRefireCount();
    
    /**
     * 
     * 功能说明:获取转换分片的sql语句
     * 
     * @param sql
     * @return
     * @throws TspException 
     */
    public String getHintSQLByDataNodes(String sql) throws TspException;
    
    /**
     * 
     * 功能说明:获取分片组内分片信息
     * 
     * @return
     */
    public String[] getSlices();
    
    /**
     * 
     * 功能说明:获取业务数据
     * 
     * @return 参数
     */
    public List<T> getBussinessDatas();
    
    /**
     * 功能说明:获取分片组名
     * 
     * @return 分片组名
     */
    public String getSliceGroupName();
   
}
